/*----------------------------------------------------------------------------*\
|
|						Public Interface to Muse Technology
|
|							     www.Muse.com
| Author : SunJun 
| Email : sundoom@msn.com
\*----------------------------------------------------------------------------*/

//////////////////////////////////////////////////////////////////////////
// $Id: MConfig.h,v 1.1 2009/04/03 12:46:09 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#ifndef __MConfig__
#define __MConfig__

//////////////////////////////////////////////////////////////////////////

#if defined __cplusplus

//////////////////////////////////////////////////////////////////////////

#include <MReference.h>

//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////

	typedef MPtr<class MConfig>MConfigPtr;

	//////////////////////////////////////////////////////////////////////////

	// this class provides an object-oriented config interface.
	class API MConfig : public MReference
	{
	public:
		// constructor
		MConfig();

		// destructor
		virtual ~MConfig();

		// set the value
		INLINE VOID setValue( const CHAR* value );

		// get the value
		INLINE const CHAR* getValue() const;

		// set the text
		INLINE VOID setText( const CHAR* value );

		// get the text
		INLINE const CHAR* getText() const;

		// set the attribute
		INLINE VOID setAttribute( const CHAR* name, const CHAR* value );

		// get the attribute
		INLINE const CHAR* getAttribute( const CHAR* name ) const;

		// set a the child to the table
		INLINE VOID setChild( const MConfig * child );

		// get the the child
		INLINE const MConfig * getChild( U32 i ) const;		

	public:
		// load a config file
		INLINE static MConfig* CDECL load( const MData* data );

	private:
		Str mValue, mText;
		std::map<Str,Str>mAttributes;
		std::vector<MConfigPtr>mChildren;
	};

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

#endif // __cplusplus

//////////////////////////////////////////////////////////////////////////

#endif // __GConfig__

//////////////////////////////////////////////////////////////////////////